package com.tom.architect.day16.simple2;

import java.lang.reflect.Proxy;

/**
 * Added by Tom on 2023/12/15.
 * 动态代理的实现。Java 给我们提供了一套动态代理的机制
 */
public class Client {

    public static void main(String[] args) {
        Man man = new Man("Tom");

        // 返回的是iBank的一个实例对象。这个对象，是Java给我们创建的。最终调用的是JNI。
        IBank ibank = (IBank) Proxy.newProxyInstance(IBank.class.getClassLoader(), // ClassLoader类的加载器
                new Class<?>[]{IBank.class}, // 目标接口
                new BankInvocationHandler(man) // InvocationHandler [关键类]
        );
        // 调用这个方法的时候，会来到BankInvocationHandler的 invoke方法。
        ibank.applyBank(); // 办卡

        ibank.lostBank(); // 挂失卡
        ibank.extraBank(); // 增值业务。

    }
}
